//package com.ctsi.framework.gateway.filter;
//
//import com.ctsi.commons.util.UtilValidate;
//import com.ctsi.framework.common.constant.ResponseCodeEnum;
//import com.ctsi.framework.common.exception.BaseException;
//import com.ctsi.framework.core.interceptor.CoreHeaderInterceptor;
//import com.ctsi.framework.core.utils.RequestUtil;
//import com.netflix.zuul.ZuulFilter;
//import com.netflix.zuul.context.RequestContext;
//import com.netflix.zuul.exception.ZuulException;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.http.HttpHeaders;
//import org.springframework.stereotype.Component;
//
//import javax.servlet.http.HttpServletRequest;
//
///**
// * @Auther: zhangjw
// * @Date: 2018/7/1 16:26
// * @Description: 拦截header，get post传参，cookies中的Authorization信息（token）
// */
//@Component
//public class AuthHeaderFilter extends ZuulFilter {
//
//    private static final Logger log = LoggerFactory.getLogger(AuthHeaderFilter.class);
//
//    private static final String BEARER_TOKEN_TYPE = "bearer ";
//    private static final String OPTIONS = "OPTIONS";
//    private static final String AUTH_PATH = "/auth";
//    private static final String LOGOUT_URI = "/oauth/token";
//
//    /**
//     * Filter type string.
//     *
//     * @return the string
//     */
//    @Override
//    public String filterType() {
//        return "pre";
//    }
//
//    /**
//     * Filter order int.
//     *
//     * @return the int
//     */
//    @Override
//    public int filterOrder() {
//        return 0;
//    }
//
//    /**
//     * Should filter boolean.
//     *
//     * @return the boolean
//     */
//    @Override
//    public boolean shouldFilter() {
//        return true;
//    }
//
//    /**
//     * Run object.
//     *
//     * @return the object
//     */
//    @Override
//    public Object run() {
//        log.info("AuthHeaderFilter - 开始鉴权...");
//        RequestContext requestContext = RequestContext.getCurrentContext();
//        try {
//            doSomething(requestContext);
//        } catch (Exception e) {
//            log.error("AuthHeaderFilter - [FAIL] EXCEPTION={}", e.getMessage(), e);
//            throw new BaseException(ResponseCodeEnum.UAC10011041);
//        }
//        return null;
//    }
//
//    private void doSomething(RequestContext requestContext) throws ZuulException {
//        HttpServletRequest request = requestContext.getRequest();
//        String requestURI = request.getRequestURI();
//
//        if (OPTIONS.equalsIgnoreCase(request.getMethod()) || !requestURI.contains(AUTH_PATH) || !requestURI.contains(LOGOUT_URI)) {
//            return;
//        }
//        String authHeader = RequestUtil.getAuthHeader(request);
//
//        if (UtilValidate.isEmpty(authHeader)) {
//            throw new ZuulException("刷新页面重试", 403, "check token fail");
//        }
//
//        if (authHeader.startsWith(BEARER_TOKEN_TYPE)) {
//            requestContext.addZuulRequestHeader(HttpHeaders.AUTHORIZATION, authHeader);
//
//            log.info("authHeader={} ", authHeader);
//            // 传递给后续微服务
//            requestContext.addZuulRequestHeader(CoreHeaderInterceptor.HEADER_LABEL, authHeader);
//        }
//    }
//
//}
//
